package com.ce.tag;

import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import com.ce.framework.util.StringUtil;
import com.ce.sys.login.model.User;
import com.ce.sys.role.dao.po.SysRolePermiss;
import com.ce.util.DbUtil;
import com.ce.util.MenuUtil;

/**
 * 嫦娥软件有限公司 版权所有 2013
 * 创建人： andy
 * 创建时间： 2013-12-20 上午11:15:41
 * 功能描述：表格列中的操作控制标签库
 * ==================================
 * 修改历史
 * 修改人        修改时间      修改位置（函数名）
 *
 * ==================================
 */
public class ColumTag extends TagSupport{
	private static final long serialVersionUID = 1L;
	
	
	/**
	 * 操作名称，必要属性，用于判断是否该操作权限，具有权限的话则显示标签体的内容
	 */
	private String optName;  //

	/**
	 * 菜单地址，非必要属性。用于在页面中获取某个菜单项的功能按钮权限
	 * 使用举例（如字典表的权限操作，字典子表的操作权限需要与字典主表的操作权限一致，因此需要传入字典主表的菜单地址，以获取和主表相同的操作功能）
	 */
	private String menuUrl;

	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		User user = User.getUser();
		//超级用户时获取菜单的所有操作项目
		if(user.isSuperUser()){
			return EVAL_BODY_INCLUDE;
		}
	    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
	    String menuId = null;
	    if(StringUtil.isNotBlank(menuUrl)){
	    	menuId = MenuUtil.getMenuId(menuUrl);
	    }
	    if(StringUtil.isBlank(menuId)){
	    	menuId = (String)request.getAttribute("menuId");
	    }
	    if(StringUtil.isNotBlank(menuId)){
	    	String opts  = this.getOptsByMenu(menuId, user);
	    	if(opts.indexOf(this.optName)>=0){
	    		return EVAL_BODY_INCLUDE;
	    	}
	    }
		return SKIP_BODY;
	}
	
	
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-11-1 下午05:48:03
	 * 功能描述：获取某个菜单项的所有操作功能的字符串
	 * 方法的参数和返回值
	 * @param menuid
	 * @param userid
	 * @return
	 * String 类似 "add,modify,delete" 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	private String getOptsByMenu(String menuid,User user){
		String optsHql = "from SysRolePermiss po where (po.vcRoleId = 'common' or  po.vcRoleId in " +
		"( select r.vcRoleId from SysAccountRole r where r.vcUserId = '"+user.getVcId()+"'))" +
	    " and po.vcMenuId = '"+menuid+"'";
		List<?> permissList  = DbUtil.executeHql(optsHql);
		Iterator<?> it = permissList.iterator();
		String opts = "";
		while(it.hasNext()){
			SysRolePermiss permiss = (SysRolePermiss)it.next();
			if(StringUtil.isNotBlank(permiss.getVcOperation()))
				opts = opts + permiss.getVcOperation()+",";
		}
		return opts;
	}
	
	public String getOptName() {
		return optName;
	}

	public void setOptName(String optName) {
		this.optName = optName;
	}

	public String getMenuUrl() {
		return menuUrl;
	}

	public void setMenuUrl(String menuUrl) {
		this.menuUrl = menuUrl;
	}

}
